# 创建点评，标题固定
# title = r'&emsp;&emsp;&emsp;&emsp;【四月份三年期业务日平台】'
import datetime

# 添加emoji标签的解析
import emoji


# 将list转为str
def list_to_str(s, tag=','):
    '''
    :param s: 需要变为文字的list
    :param tag: 数据之间的分割标识
    :return: 修改好可以list str文字
    '''
    rs = str(s).replace('[', '').replace(']', '').replace('\'', '').replace(',', tag).replace(' ', '')
    return rs


# 获取半小时时间
def get_half_hour():
    now_time = ''
    now_hour = datetime.datetime.now().strftime(r'%H')
    now_min = datetime.datetime.now().strftime(r'%M')
    if int(now_min) >= 30:
        now_time = now_hour + ':30'
    else:
        now_time = now_hour + ':00'
    return now_time


# 添加每日实时业绩
def daily_commnet(sort_flag, gap, data):
    '''
    :param sort_flag: 累计达成
    :param gap: 缺口
    :param data: 需要点评的数据
    :return:
    '''
    province_comment = ''

    # 获取当前需要点评的数据
    # data = data[['单位', '今日签单', '日平台确保缺口', '日平台确保达成率']]
    # 让全省数据不进行排序，直接添加到最后一排
    # 获取全省数据，暂时保存
    qs_data = data[data['单位'].isin(['全省'])].copy()
    # 剔除全省数据
    data = data[~data['单位'].isin(['全省'])]
    # 对数据进行排序
    sorted_data = data.sort_values(by=sort_flag, ascending=False)
    data = sorted_data.append(qs_data, ignore_index=True)
    # 添加时间
    # 本地化
    show_time = datetime.datetime.now()
    qs_flag = list(qs_data[gap])[0]
    # 时间建构化
    now_time = {'month': show_time.month, 'day': show_time.day, 'time': get_half_hour()}
    if qs_flag > 0:

        # 创建全省概况点评未达成
        # TODO:达成全省平台需要修改
        province_comment = province_comment + '&emsp;&emsp;1.:sunny:全省概况:sunny:' + '截至:' + str(
            now_time.get('month')) + '月' + str(
            now_time.get('day')) + '日' + now_time.get('time') + '，' + '全省三年期当日累计签单' + str(
            data.iloc[13, 2]) + '万元。日平台缺口{}万元，达成率{}。' \
                               .format(data.iloc[13, 3], data.iloc[13, 4])
    else:
        # 创建全省概况点评已达成
        # TODO:达成全省平台需要修改
        province_comment = province_comment + '&emsp;&emsp;1.:sunny:全省概况:sunny:' + '截至:' + str(
            now_time.get('month')) + '月' + str(
            now_time.get('day')) + '日' + now_time.get('time') + '，' + '全省三年期当日累计签单' + str(
            data.iloc[13, 2]) + '万元。顺利达成今日平台，达成率{}。' \
                               .format(data.iloc[13, 4])
    # 添加达成情况
    temp_data = data.sort_values(by=[gap])
    finish_city = list(temp_data[temp_data[gap] < 0]['单位'])
    if len(finish_city) == 1:
        province_comment = province_comment + list_to_str(finish_city) + '完成今日平台:fire:'
    elif len(finish_city) >= 2:
        province_comment = province_comment + list_to_str(finish_city) + str(len(finish_city)) + '家单位完成日平台目标:fire:'
    else:
        province_comment = province_comment + '暂无单位完成日平台目标。'
    will_finishcity = temp_data[(temp_data[gap] < 10) & (temp_data[gap] > 0)]
    will_finishcity_list = list(will_finishcity['单位'])
    # 如果即将达成单位为1个
    if len(will_finishcity_list) == 1:
        #     显示即将达成单位的缺口
        province_comment = province_comment + list_to_str(will_finishcity_list) + '仅差' + str(
            list(will_finishcity[gap])[0]) + '万元达成今日平台。'
    elif len(will_finishcity_list) >= 2:
        province_comment = province_comment + list_to_str(will_finishcity_list) + '仅差不到10万元达成今日平台。'

    '暂无单位完成日平台目标。'
    # 添加各市达成情况
    province_comment = province_comment + '<br/>' + '&emsp;&emsp;2.:round_pushpin:地市战情:round_pushpin:'
    province_comment = province_comment + '<br/>' + r'&emsp;&emsp;&emsp;&emsp;' + ':fire:{}({}万元)'.format(
        data.iloc[0, 0],
        data.iloc[0, 2]) + ':fire:'
    province_comment = province_comment + '<br/>' + r'&emsp;&emsp;&emsp;&emsp;' + ':fire:{}({}万元)'.format(
        data.iloc[1, 0],
        data.iloc[1, 2]) + ':fire:'
    province_comment = province_comment + '<br/>' + r'&emsp;&emsp;&emsp;&emsp;' ':fire:{}({}万元)'.format(
        data.iloc[2, 0],
        data.iloc[2, 2]) + ':fire:'
    province_comment = province_comment + '<br/>' + r'&emsp;&emsp;' + '保费分列全省前三。'
    # 添加已经完成单位
    # 添加较差单位
    # 找到未破0单位
    zero_data = data[data[sort_flag] <= 0]
    # 获取未破0单位数
    zero_num = zero_data['单位'].count()
    # # 获取全省单位数
    # zero_num, data.count()
    # 如果大于3个，直接显示为0的单位
    zero_city = list_to_str(list(zero_data['单位']))
    # 获取倒数3家单位：
    # low_city = data.iloc[-5:-1, :]
    # print(low_city)
    if zero_num >= 3:
        # pass
        province_comment = province_comment + '<br/>' + r'&emsp;&emsp;' + zero_city + str(zero_num) + '家单位尚未破零。'
    #    有0单位，但是为超过3个的情况
    elif zero_num >= 1:

        province_comment = province_comment + '<br/>' + r'&emsp;&emsp;' + '{}({}万元)，{}({}万元)，{}({}万元)三家单位发展较为缓慢。'.format(
            data.iloc[-4, 0], data.iloc[-4, 2],
            data.iloc[-3, 0], data.iloc[-3, 2],
            data.iloc[-2, 0], data.iloc[-2, 2]) + '其中' + zero_city + '尚未破0。'
    else:
        province_comment = province_comment + '<br/>' + r'&emsp;&emsp;&emsp;&emsp;' + '{}({}万元)，{}({}万元)，{}({}万元)三家单位发展较为缓慢。'.format(
            data.iloc[-4, 0], data.iloc[-4, 2],
            data.iloc[-3, 0], data.iloc[-3, 2],
            data.iloc[-2, 0], data.iloc[-2, 2])
    # 转意emoji表情
    province_comment = emoji.emojize(province_comment, use_aliases=True)

    return province_comment


# 月度点评
def month_commnet(sort_flag, gap, data):
    '''
       :param sort_flag: 累计达成
       :param gap: 缺口
       :param data: 需要点评的数据
       :return:
       '''
    province_comment = ''

    # 获取当前需要点评的数据
    # data = data[['单位', '今日签单', '日平台确保缺口', '日平台确保达成率']]
    # 让全省数据不进行排序，直接添加到最后一排
    # 获取全省数据，暂时保存
    qs_data = data[data['单位'].isin(['全省'])].copy()
    # 剔除全省数据
    data = data[~data['单位'].isin(['全省'])]
    # 对数据进行排序
    sorted_data = data.sort_values(by=sort_flag, ascending=False)
    # 对除全省外累计达成进行除以100，然后找出最大额值
    temp = sorted_data.copy()
    temp[sort_flag] = temp[sort_flag] / 100
    # 对数据取整
    temp[sort_flag] = temp[sort_flag].astype(int)
    stage = temp.groupby(['累计达成']).count().reset_index().iloc[-1, :]
    # 几家单位
    stage_num = stage['单位']
    stage_val = stage['累计达成']
    # 将全省数据补齐
    data = sorted_data.append(qs_data, ignore_index=True)

    # 添加时间
    # 本地化
    show_time = datetime.datetime.now()
    # 时间建构化
    now_time = {'month': show_time.month, 'day': show_time.day, 'time': get_half_hour()}
    # 创建全省概况点评
    province_comment = province_comment + '&emsp;&emsp;截至' + str(
        now_time.get('month')) + '月' + str(
        now_time.get('day')) + '日' + now_time.get('time') + '，' + '全省' + str(
        now_time.get('month')) + '月三年期累计签单' + str(
        data.iloc[13, 2]) + '万元。指导目标缺口{}万元，达成率{}。' \
                           .format(data.iloc[13, 3], data.iloc[13, 4])
    # 添加达成情况
    temp_data = data.sort_values(by=[gap])
    finish_city = list(temp_data[temp_data[gap] < 0]['单位'])
    if len(finish_city) == 1:
        province_comment = province_comment + list_to_str(finish_city) + '完成指导目标:fire:'
    elif len(finish_city) >= 2:
        province_comment = province_comment + list_to_str(finish_city) + str(len(finish_city)) + '家单位完成指导目标:fire:'
    else:
        # province_comment = province_comment + '暂无单位完成指导目标。'
        pass
    # 添加各市达成情况
    # province_comment = province_comment + '<br/>' + '&emsp;&emsp;2.:round_pushpin:地市战情:round_pushpin:'
    province_comment = province_comment + r'<br/>&emsp;&emsp;{}({}万元)、'.format(
        data.iloc[0, 0],
        data.iloc[0, 2])
    province_comment = province_comment + '{}({}万元)、'.format(
        data.iloc[1, 0],
        data.iloc[1, 2])
    province_comment = province_comment + '{}({}万元)'.format(
        data.iloc[2, 0],
        data.iloc[2, 2])
    province_comment = province_comment + '保费分列全省前三。'
    # 添加百万平台点评
    if 10 > stage_val >= 1:
        province_comment = province_comment + list_to_str(list(data.iloc[0:stage_num, 0])) + '总量突破' + str(
            stage_val) + '百万元。'
    elif stage_val >= 10:
        province_comment = province_comment + list_to_str(list(data.iloc[0:stage_num, 0])) + '总量突破' + str(
            stage_val // 10) + '千万。'

    # TODO:到时候添加达成单位
    # 添加已经完成单位
    # 添加较差单位
    # 找到未破0单位
    zero_data = data[data[sort_flag] <= 0]
    # 获取未破0单位数
    zero_num = zero_data['单位'].count()
    # # 获取全省单位数
    # zero_num, data.count()
    # 如果大于3个，直接显示为0的单位
    zero_city = list_to_str(list(zero_data['单位']))
    # 获取倒数3家单位：
    # low_city = data.iloc[-5:-1, :]
    # print(low_city)
    if zero_num >= 3:
        # pass
        province_comment = province_comment + '<br/>' + r'&emsp;&emsp;' + zero_city + str(zero_num) + '家单位尚未破零。'
    #    有0单位，但是为超过3个的情况
    elif zero_num >= 1:

        province_comment = province_comment + '<br/>' + r'&emsp;&emsp;' + '{}({}万元)，{}({}万元)，{}({}万元)三家单位发展较为缓慢。'.format(
            data.iloc[-4, 0], data.iloc[-4, 2],
            data.iloc[-3, 0], data.iloc[-3, 2],
            data.iloc[-2, 0], data.iloc[-2, 2]) + '其中' + zero_city + '尚未破0。'
    else:
        province_comment = province_comment + '<br/>' + r'&emsp;&emsp;' + '{}({}万元)，{}({}万元)，{}({}万元)三家单位发展较为缓慢。'.format(
            data.iloc[-4, 0], data.iloc[-4, 2],
            data.iloc[-3, 0], data.iloc[-3, 2],
            data.iloc[-2, 0], data.iloc[-2, 2])
        # 转意emoji表情
    # 最后的口号
    province_comment = province_comment + r'</br> &emsp;&emsp;各单位要抓住三年期销售机遇，加大政策宣导，激发全员销售热情，全面提升日平台。'
    province_comment = emoji.emojize(province_comment, use_aliases=True)

    return province_comment


# 对抗点评
def compete_commnet(data):
    '''
    :param sort_flag: 累计达成
    :param gap: 缺口
    :param data: 需要点评的数据
    :return:
    '''
    province_comment = ''

    # 获取当前需要点评的数据
    # data = data[['单位', '今日签单', '日平台确保缺口', '日平台确保达成率']]
    # 让全省数据不进行排序，直接添加到最后一排
    # 获取全省数据，暂时保存
    qs_data = data[data['单位'].isin(['全省'])].copy()
    # 剔除全省数据
    data = data[~data['单位'].isin(['全省'])]
    # 对数据进行排序，首先是三年期
    # sorted_data = data.sort_values(by=['三年期'], ascending=False)
    sorted_data = data.sort_values(by=['五年期及以上'], ascending=False)


    data = sorted_data.append(qs_data, ignore_index=True)
    # 添加时间
    # 本地化
    show_time = datetime.datetime.now()
    # qs_flag = list(qs_data[gap])[0]
    # 时间建构化
    now_time = {'month': show_time.month, 'day': show_time.day, 'time': get_half_hour()}

    # 创建全省概况点评已达成
    # province_comment = province_comment + '&emsp;&emsp;1.:sunny:全省概况:sunny:' + '截至:' + str(
    #     now_time.get('month')) + '月' + str(
    #     now_time.get('day')) + '日' + now_time.get('time') + '，' + '全省3年期当日累计签单' + str(
    #     qs_data.iloc[0, 2]) + '万元，5年期及以上保费' + str(
    #     qs_data.iloc[0, 3]) + '万元。其中{}（{}万元）、{}（{}万元）、{}（{}万元）三年期保费列位全省前三。'.format(
    #     sorted_data.iloc[0, 1], sorted_data.iloc[0, 2],
    #     sorted_data.iloc[1, 1], sorted_data.iloc[1, 2],
    #     sorted_data.iloc[2, 1], sorted_data.iloc[2, 2],
    # )
    # 五年期
    province_comment = province_comment + '&emsp;&emsp;1.:sunny:全省概况:sunny:' + '截至:' + str(
        now_time.get('month')) + '月' + str(
        now_time.get('day')) + '日' + now_time.get('time') + '，' + '全省5年期当日累计签单' + str(
        qs_data.iloc[0, 3]) + '万元，其中{}（{}万元）、{}（{}万元）、{}（{}万元）5年期保费列位全省前三。'.format(
        sorted_data.iloc[0, 1], sorted_data.iloc[0, 3],
        sorted_data.iloc[1, 1], sorted_data.iloc[1, 3],
        sorted_data.iloc[2, 1], sorted_data.iloc[2, 3],
    )
    # 数据根据5年起及以上进行重拍
    # sorted_data = sorted_data.sort_values(by=['五年期及以上'], ascending=False)
    # # 五年期以上较好的单位数量
    # good_num = sorted_data[sorted_data['五年期及以上'] > 10]['单位'].count()
    # # 如果只有一家单位的5年期超过10万元
    # if good_num == 1:
    #     province_comment = province_comment + '{}公司5年期保费全省最高达{}万元。'.format(sorted_data.iloc[0, 1],
    #                                                                        sorted_data.iloc[0, 3])
    # elif good_num == 2:
    #     province_comment = province_comment + '{}({}万元)、{}({}万元)2家公司5年期保费暂时领先。'.format(
    #         sorted_data.iloc[0, 1], sorted_data.iloc[0, 3],
    #         sorted_data.iloc[1, 1], sorted_data.iloc[1, 3])
    # elif good_num == 3:
    #     province_comment = province_comment + '{}({}万元)、{}({}万元)、{}({}万元)5年期保费列位全省前三。'.format(
    #         sorted_data.iloc[0, 1], sorted_data.iloc[0, 3],
    #         sorted_data.iloc[1, 1], sorted_data.iloc[1, 3],
    #         sorted_data.iloc[2, 1], sorted_data.iloc[2, 3]
    #     )
    # 添加分组领先数据
    sorted_data = sorted_data.sort_values(by=['追踪保费合计'], ascending=False)
    # 如果该战区所有单位都为0的单位都去除
    rs = sorted_data[sorted_data['追踪保费合计'] > 0]
    # 让数据按照战区排序
    # 排序顺序
    list_sorted = ['第一战区', '第二战区', '第三战区', '第四战区', '第五战区', '第六战区']
    rs['战区'] = rs['战区'].astype('category').cat.set_categories(list_sorted)
    # 对排序后数据进行分组排序,找到每个战区暂时领先的单位
    rs = rs.groupby(['战区']).first()
    # 添加战区获胜点评
    # 获取获胜单位
    win_city = list_to_str(list(rs['单位']), '、')
    # 添加战区情况
    province_comment = province_comment + '<br/>&emsp;&emsp;2.:trophy:战区战况:trophy:：' + win_city + '分别在各自战区暂时领先。'
    province_comment = emoji.emojize(province_comment, use_aliases=True)

    return province_comment
